Serverless:云时代的软件架构核心思想
Serverless绝对是这两三年来业界最火的词(UC Berkley写的一篇新的Serverless的观点的文章里有Serverless的搜索热度和当年MapReduce最热的时候一样),在AWS这几年的reInvent大会上也是绝对的主角,各种挂着Serverless xx的产品也层出不穷,但是估计你问十个人,会有十种解读,我认为目前Serverless更主要的是一种思想,但具体怎么实践还在探索期,这篇文章就来讲讲我认为的Serverless。
AWS眼里的Serverless
讲自己的观点之前先引用一些AWS的观点,毕竟目前Serverless主要是AWS在引领:
"大概12年之前,我们深知云将给软件带来翻天覆地的变化,我们创造了AWS。一直以来AWS希望与软件开发者密切合作,打造出一个现代化的软件开发框架。而不是告诉客户,你们需要什么工具。在AWS的信念中,我们认为真正知道软件应该如何开发的只有一个人,就是客户本人。"
“现代化的架构是使用AWS的服务、Lambda的功能,把它们连接在一起。没有中间层、没有应用层,也没有数据库层,它是一系列web服务连接在一起,由功能连接在一起,无需服务器,而安全、可靠性、规模、性能、成本管理这些事项由AWS做好”。
这两段话是AWS的CTO在2018年8月中国的AWS Summit上讲的,在AWS的观点里,我认为Serverless不是指FaaS,而是指上面讲的这个现代化架构。
"Everyone wants just to focus on business logic."
这句话是在刚过去不久的AWS reInvent 2018大会上讲到的,这句话其实对应了前面的现代化架构的价值点。
从上面这些引用的观点,我们能看到对于AWS而言,并不是FaaS或者说Lambda==Serverless,而是很多的东西组合在一起才是Serverless,它的最大价值则是让使用者能够just to focus on business logic,而要做到这样的效果其实是需要业务系统的架构演进到AWS说的现代化架构。
UC Berkley一篇关于Serverless观点的文章
除了主导者AWS外,UC Berkley最近也发表了一篇关于Serverless观点的文章:"Serverless Computing: One Step Forward, Two Steps Back",大家可以点击阅读原文来看这篇文章,文章里首先阐述了下Serverless:
"As a result, cloud providers are quick to emphasize that serverless is not only FaaS. It is FaaS supported by a 'standard library': the various multitenanted, autoscaling services provided by the vendor. In the case of AWS, this includes S3 (large object storage), DynamoDB (key-value storage), SQS (queuing services), SNS (noti- fication services), and more. This entire infrastructure is managed and operated by AWS; developers simply register FaaS code that uses these services and receive 'pay-as-you-go' bills that scale up and down according to their storage and compute usage."
这个观点和前面说的FaaS!=Serverless是一个意思。
关于One Step Forward的观点为:
“By providing autoscaling, today’s FaaS offerings take a big step forward for cloud programming, offering a practically manageable, seemingly unlimited compute platform.”
可以看到这里的观点是Serverless带来的主要是云资源的弹性的使用。
关于Two Steps Back的观点为:
“First, they painfully ignore the importance of efficient data processing.”
这个观点指的主要是他们认为Function的情况下,每个Function是独立的,Function之间的交互是通过持久或临时的存储、事件驱动来完成,导致了完成交互的时间比以前慢了很多很多。
“Second, they stymie the development of distributed systems.”
这个观点指的主要是通常分布式系统会依赖很多的类似leader election协议、数据一致性、事务机制等,而这些在目前的FaaS类型的平台里是很难去实现的。
我眼里的Serverless
看到Serverless现在的状况,太像当年的SOA时代了,我在07年加入淘宝做服务化,那几年SOA思想满天飞,但真的要开始做服务化的时候,会发现完全不知道该怎么做,因为压根就没有地方定义清楚什么是服务化,用什么框架来开发服务化的业务系统,于是当年淘宝完全是自己摸索,做了HSF来作为服务化的开发框架,演进形成了经典的Service Provider/Service Consumer、Soft Load Balance服务框架结构,再后来又做了各种工具来满足服务化后的Tracing、排查问题、服务治理等诉求,服务化现在基本成为了大部分业务系统的核心架构思想,它解决了超百人规模的研发团队协作效率问题、以及单体系统的水平伸缩问题。
对于Serverless,我也认为是新时代的一个核心架构思想,业务系统的架构要演进,需要非常强的动力,例如服务化架构演进的动力通常就是超百人规模的研发团队或者是单体系统的水平伸缩问题,那么业务系统演进为Serverless架构的动力是什么呢?
软件发展到今天,多数企业的业务系统开始越来越复杂化,开发一个业务系统需要掌握和关注的知识点越来越多,并且系统中出现了越来越多的非业务的基础技术系统,例如分布式cache等等,在这种情况下,研发的门槛在上升,效率在下降,而Serverless思想我觉得很重要的就是用于解决研发门槛和效率的问题,让业务系统研发能更专注的关注在业务逻辑上(和AWS说的现代化架构的观点一致),而不仅仅是按量付费。
那么Serverless思想怎么来解决研发门槛和效率的问题,我觉得核心的点就在于把业务系统开发时需要用到的各种基础技术产品都隐藏起来,并将要用到的一些基础技术进行归纳抽象,例如存储、服务交互,这样对于开发人员来说要学习的东西可以大幅减少,并且也不用管一堆依赖的基础技术产品的运行状况等,如果能做到这样呢,意味着在开发业务系统时可以更加聚焦的纯粹关注业务逻辑就好,目前看到的各种FaaS平台思想上其实会很像这种,但我觉得做的很不够。
为什么我说这是云时代的软件架构思想呢,因为Serverless这种思想我觉得只适用于云时代,要把一堆的基础技术产品隐藏,并提供丰富的选择,这个基本只有在云时代才可能做到,在以前各自部署业务系统的情况下,这个模式很难去做到和规模化,但在云时代,这就完全有可能了,其实可以认为现在已经在使用一些云存储服务、中间件服务、数据库服务的业务系统或多或少已经在进入Serverless时代,只是由于目前多数一方面还很难做到高度抽象,另一方面很难做到完全不用管依赖的这些基础云服务,以及云服务的选择还是不够丰富,导致离Serverless的价值还有距离。
我非常看好Serverless这样的思想最终落地成一个开发框架,并将目前的业务系统演进到Serverless架构,基于这个框架很容易的去实现一个基于Serverless架构的业务系统,那么也就意味着大多数的企业,以后不用自己组建做基础技术的团队,可以依靠强大的云厂商的基础技术团队(当然,这个框架一定不能是lock-in某家云厂商的,并且要能非常容易就切换,这个只要框架强大,就可以倒逼各云厂商支持事实标准),招的所有的研发都只需要专注在自己企业的业务逻辑上,从这也能看出,目前的各种FaaS平台离这个差距还很大。
Serverless为什么到现在还没怎么流行起来呢,我觉得非常大的原因就是像复杂的企业业务系统是完全没办法基于目前这样简单的FaaS平台方式来实现的,这个观点和UC Berkley那篇文章里的The Second Step Back很一致,目前多数用Serverless的用户都只是把它用于一些非关键场景里,一个架构级的思想、框架要成为主流,必须是应用到企业业务系统的主流程中,所以怎么结合Serverless的思想、目标落地到企业业务的核心系统中,展现价值,并沉淀出Serverless开发框架(就像阿里当年做服务化,沉淀的HSF、Dubbo、SOFA),那么Serverless才能成为新一代的业务系统的主流架构,我很坚信这一天不会太远,所以我是强烈推荐各位开发者们从现在开始就应该多学习和试用Serverless,按照这个标准,能看出目前市场上其实完全没有类似的东西(iron.io在做的open source serverless computing在探索支持request/response这种类似在线业务系统的典型结构方式),架构级的演进机会可不是年年都有,甚至是5年/10年都不一定能碰到一次,所以这也同样意味着这是个巨大的机会,几年后再来看看这篇文章,这个市场是谁家的,一定会很有意思。
结合Serverless、还有之前各种的软件架构发展来看,其实软件架构的发展很多时候都在围绕着研发门槛和效率(最典型的就是各种基础技术产品:TensorFlow等等,让业务研发更聚焦业务逻辑),并推进形成更大规模的社会协作和分工,所以很多的技术创新如果能围绕好这个本质问题,是一定能推进软件架构发展的。
对于能看到这的同学们,来一个对Serverless的调查。
References
"亚马逊CTO 沃纳·威格尔:AWS不是技术导向而是客户导向" https://www.iyiou.com/p/79020.html
"Serverless Computing: One Step Forward, Two Steps Back" https://arxiv.org/pdf/1812.03651.pdf